function parse(str) {
    //对模板进行标记花，得到tokens
    let tokens = tokenzie(str);
    console.log("tokens结果", JSON.parse(JSON.stringify(tokens)))
        //穿件个Root根节点
    const root = {
        type: "Root",
        children: []
    };
    var index = 0;
    //穿件elememntStrack栈
    const elementStack = [root];
    //开启一个while循环扫描tokens，直到所有Token都被扫描完毕为止
    while (tokens.length && index < 1000) {
        index++;
        //获取当前战队节点作为父节点
        const parent = elementStack[elementStack.length - 1];

        //当前扫描的token
        const t = tokens[0];
        switch (t.type) {
            case "tag":
                //如果当前token是开始标签，则创建Element类型的AST节点
                const elementNode = {
                    type: "Element",
                    tag: t.name,
                    children: []
                };
                parent.children.push(elementNode);
                elementStack.push(elementNode);
                break;
            case "text":
                ///如果当前Token是文本，则创建Text类型的Ast
                const textNode = {
                    type: "Text",
                    content: t.content
                }
                parent.children.push(textNode);
                break;
            case "tagEnd":
                //遇到极速标签，将栈顶节点弹出
                elementStack.pop();
                break;

        }
        tokens.shift();
    }
    return root;
}